home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / simcode.arc / SCANLINE.PAS < prev    next >
Pascal/Delphi Source File  |  1984-12-03  |  3KB  |  119 lines

  1. {$symtab-,$pagesize:62,$linesize:131,$debug-,
  2. $title:'SCANLINE.PAS -- Output Line to Line Printer'}
  3. {    COPYRIGHT @ 1982
  4.     Jim Holtman and Eric Holtman
  5.     35 Dogwood Trail
  6.     Randolph, NJ 07869
  7.     (201) 361-3395
  8. }
  9.  
  10.  module scanline;
  11. {$include:'simterm.inc'}
  12. {$include:'graph.inc'}
  13.  
  14.     procedure scan_line(const line : screen_buf);
  15.  
  16.        type
  17.       lines = 0..11;       {for SUBline counters}
  18.  
  19.        const
  20.       BOLD = chr(27)*'E'*chr(27)*'G';
  21.       REGULAR = chr(27)*'F'*chr(27)*'H';
  22.       SPACETHIRD = chr(27)*'A'*chr(4)*chr(27)*'2';
  23.       NORMAL = 7;
  24.       UNDERLINE = 1;
  25.       INTENSE = #0a;
  26.       INTENSEUN = #09;
  27.       REVERSE = #70;
  28.       SPACENORMAL = chr(27)*'A'*chr(12)*chr(27)*'2';
  29.       CR = chr(13);
  30.       CRLF = chr(13)*chr(10);
  31.  
  32.        var
  33.       line_ctr [static] : lines;
  34.       line0,line1,line2 : boolean;
  35.       i,j,k,l,m : integer;
  36.       count : integer;
  37.       curstr : string(80);
  38.       value line_ctr := 0;       {start with superscript line}
  39.  
  40.        function space(now : lines;
  41.         where : lines) : lines;
  42.  
  43.       var
  44.          dif : integer;
  45.          space_code [static] : string(7);
  46.          value space_code := SPACENORMAL*CRLF;
  47.                    {DUMMY for spacing code}
  48.  
  49.       begin
  50.          dif := now-where;
  51.          if dif >= 0 then dif := 12 - dif
  52.          else dif := -dif;
  53.          space_code[3] := chr(dif);
  54.                    {setup the right amount}
  55.          xlpt1(space_code);
  56.          space := where       {new value}
  57.          end;
  58.  
  59.        begin
  60.       line0 := false;
  61.       line1 := false;
  62.       line2 := false;
  63.       count := 1;
  64.       for i := 1 to 80 do begin
  65.          curstr[i] := ' ';
  66.          case line[i].d_attr of
  67.  
  68.         INTENSE: begin
  69.            line0 := true;
  70.            curstr[i] := chr(line[i].d_char)   end;
  71.  
  72.         NORMAL, UNDERLINE, REVERSE: line1 := true;
  73.  
  74.         INTENSEUN: line2 := true;
  75.  
  76.         otherwise ;       {just make sure}
  77.  
  78.         end;
  79.          end;
  80.       if line0 then begin
  81.          line_ctr := space(line_ctr,4);
  82.          xlpt1(curstr)   end;
  83.       if line1 then begin
  84.          line_ctr := space(line_ctr,6);
  85.          for i := 1 to 80 do begin
  86.         curstr[i] := ' ';
  87.         if line[i].d_attr = REVERSE then curstr[i] := chr(line[i].
  88.              d_char);
  89.         end;
  90.          xlpt1(BOLD);
  91.          xlpt1(curstr);
  92.          xlpt1(CR);
  93.          xlpt1(REGULAR);
  94.          for i := 1 to 80 do begin
  95.         curstr[i] := ' ';
  96.         if line[i].d_attr = UNDERLINE then curstr[i] := '_';
  97.         end;
  98.          xlpt1(curstr);
  99.          xlpt1(CR);
  100.          for i := 1 to 80 do begin
  101.         curstr[i] := ' ';
  102.         if (line[i].d_attr = NORMAL) or (line[i].d_attr = UNDERLINE)
  103.              then curstr[i] := chr(line[i].d_char);
  104.         end;
  105.          xlpt1(curstr);
  106.          end;
  107.       if line2 then begin
  108.          line_ctr := space(line_ctr,8);
  109.          for i := 1 to 80 do begin
  110.         curstr[i] := ' ';
  111.         if (line[i].d_attr = INTENSEUN) then curstr[i] := chr(line[i].
  112.              d_char);
  113.         end;
  114.          xlpt1(curstr);
  115.          end;
  116.       xlpt1(CR*SPACENORMAL);
  117.       end;
  118.  end.
  119.